SQL dotaz

Otázka od: Lasevic, Martin

14. 6. 2004 10:40

Zdravim,

resim nasledujici SQL dotaz a zatim si s tim po nekolika dnech nevim rady (
pritom nesmim pouzit ani view ani SP).

Mame klienty, kteri jsou navstevovani nasimi obchodniky a na kazde schuzce
se bavi o produktech ( nekdy stejnych, nekdy jinych).

Mam za ukol vytvorit sql dotaz, ktery mi vyjede seznam klientu a posledni
informaci o produktu, tzn. ze pokud se vyskytuje o produktu info vickrat,
tak pouzit info z posledni navstevy.

Napada vas, jak na to?

Diky za pomoc

Martin

======================================
ing. Martin Lasevic
Software Specialist
Tel.: +420-2-51 02 11 30, +420-602-298 904
Fax: +420-2-51 02 11 23
mailto:mlasevic@ratiopharm.cz


Odpovedá: Karel Rys

18. 10. 2002 8:57

Tomáš Fajman dne 18 Oct 2002 v 9:30:

> Prosim pomozte mi nekdo :O)
>
> Mam dve tabulky TAB1 a TAB2 a v obouch je sloupec PIN a potreboval
> bych napsat 'select * from TAB1' ale aby mi vybral jen ty zaznamy v
> kterych je PIN ktere neni v TAB2. Predem dikes za radu

Ahoj, snad takhle:

SELECT a.*
FROM Tab1 a
LEFT OUTER JOIN Tab2 b on (b.Pin=a.Pin)
WHERE b.Pin IS NULL

Existuje neco jako WHERE EXISTS..., jenze to myslim byvalo pomalejsi...

Karel Rys

Odpovedá: bardon

18. 10. 2002 13:23

Takhle to delam na MSSQL

SELECT TAB1.PIN
FROM TAB1
LEFT OUTER JOIN TAB2 ON TAB1.PIN = TAB2.PIN
WHERE TAB2.PIN IS NULL

-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz]On
Behalf Of Tomas Fajman

Prosim pomozte mi nekdo :O)

Mam dve tabulky TAB1 a TAB2 a v obouch je sloupec PIN a potreboval bych
napsat 'select * from TAB1' ale aby mi vybral jen ty zaznamy v kterych je
PIN ktere neni v TAB2. Predem dikes za radu


Odpovedá: Lstiburek Pavel

18. 10. 2002 11:37

SELECT TAB1.* FROM TAB1 LEFT OUTER JOIN TAB2 ON TAB1.PIN = TAB2.PIN
WHERE TAB2.PIN IS NULL

nebo

SELECT * FROM TAB1 WHERE PIN NOT IN ( SELECT PIN FROM TAB2)

Pavel

PS: Prvni verze byva rychlejsi pokud jsou tabulky vetsi, a indexovane dle
PIN

> Od: Tomáš Fajman [mailto:tomas.fajman@ortex.cz]
> Mam dve tabulky TAB1 a TAB2 a v obouch je sloupec PIN a
> potreboval bych
> napsat 'select * from TAB1' ale aby mi vybral jen ty
> zaznamy v kterych je
> PIN ktere neni v TAB2. Predem dikes za radu

Odpovedá: Ing. Pavel Žilinec

18. 10. 2002 9:17

select *
  from Tab1
  where not exists(
      select top 1 Tab2.PIN
        from Tab2
        where Tab2.PIN = Tab1.PIN)
nebo

select Tab1.*
  from Tab1
  left outer join Tab2 on Tab1.PIN = Tab2.PIN
  where Tab2.PIN is null
        
--------
ing. Pavel Zilinec
MailTo:zilinec@email.cz

Prog-Soft s.r.o. Plzen
Informacni system pro vyrobce
a distributory napoju

TF> Prosim pomozte mi nekdo :O)

TF> Mam dve tabulky TAB1 a TAB2 a v obouch je sloupec PIN a potreboval bych
TF> napsat 'select * from TAB1' ale aby mi vybral jen ty zaznamy v kterych je
TF> PIN ktere neni v TAB2. Predem dikes za radu

Odpovedá: Ing. Pavel Zilinec

9. 4. 2004 4:34

Jednak Tva konstrukc zpusobi, ze kdyz bude mit odberatel vice
objednavek, tak se Ti take tolikrat vrati (melo by tam byt distinct)
  Jaky SQL server?
MS SQL:
  select odb.nazev
    from Odberatele odb
    left outer join Objednavky obj on odb.id_odberatele = obj.id_odberatele
    where obj.id_odberatele is null
Mnoznost pro jiny server:
  select odb.nazev
    from Odberatele odb
    where not odb.id_odberatele in (select distinct obj.id_odberatele from
Objednavky obj)

MS SQL (Tvuj puvodni dotaz)
  select distinct odb.nazev
    from Odberatele odb
    join Objednavky obj on odb.id_odberatele = obj.id_odberatele

    
--
ing. Pavel Zilinec
MailTo:zilinec@email.cz

Prog-Soft s.r.o. Plzen
Informacni system pro vyrobce
a distributory napoju

Friday, April 9, 2004, 1:17:38 AM, bylo napsano:

DK> Zdravim,

DK> mam jednoduchy SQL dotaz, ktery vybere vsechny odberatele, kteri maji
DK> objednavku,

DK> select odb.nazev from Odberatele odb, Objednavky obj
DK> where odb.id_odberatele = obj.id_odberatele

DK> lze sestrojit dotaz, ktery vybere vsechny odberatele, kteri NEMAJI
DK> objednavku?

DK> David Klodner



Odpovedá: petr palicka

9. 4. 2004 6:14

Ahoj,

   ja osobne bych ten dotaz napsal takto:

select distinct
   odb.nazev
from
   Odberatele odb
   left join Objednavky obj on obj.id_odberatele = odb.id_odberatele

no a ten obraceny takto:

select distinct
   odb.nazev
from
   Odberatele odb
   left join Objednavky obj on obj.id_odberatele = odb.id_odberatele
where
   obj.id_odberatele is null

nevim jak kde ale na FB by to melo slapat (imho na ledascem,
je to standardni left join)

peca

Odpovedá: Blazek Jaroslav

9. 4. 2004 7:13

Ahoj,

> d.klodner@ordis.cz 9.4.2004 1:17:38 >>>
>lze sestrojit dotaz, ktery vybere vsechny odberatele, kteri NEMAJI
>objednavku?

SELECT *
FROM Odberatel od
WHERE NOT EXISTS(SELECT * FROM Objednavka ob WHERE od.IDOdberatel =
ob.IDOdberatel)


S pozdravem

Bc. Jaroslav Blazek
Access-IT Ceska Lipa
mailto:jaroslav.blazek@access-it.cz
http://www.access-it.cz
ICQ# : 133673990
+420605/813644


Odpovedá: Ludek ZITA

9. 4. 2004 19:07

 On Behalf Of Dalibor
> Ahoj,
> potrebuji zjistit jednu vetu z kazde skupiny ze vsemi sloupci
> s nejnovejsim casem pro dany datum
>
> Da se to nejak?

Ahoj.
Mozna ano.

Ludek












P.S. Pokud by se ti moje odpoved nezdala dostatecna tak je to proto, ze
odpovida Tvemu "zadani" 
Takze asi nam budes muset prozradit datovou strukturu a typ SQL serveru.
Jinak Ti nikdo nepomuze.


Odpovedá: Ing. Pavel Zilinec

14. 4. 2004 11:14

:-) Asi neodpovim na otazku, ale budiz  

Dejme tomu, ze dana skupina je v PoleSkup
select a.*
  from Tabule a
  join (
    select pom.PoleSkup, max(pom.Datum)
      from Tabule pom
      group by pom.PoleSkup) b on a.PoleSkup = b.PoleSkup and a.Datum = b.Datum
  order by a.PoleSkup

nebo stejny vysledek jinym zapisem
  
select a.*
  from Tabule a
  where a.Datum = (select max(b.Datum) from Tabule b where a.PoleSkup =
b.PoleSkup)
  order by a.PoleSkup
  
--
ing. Pavel Zilinec
MailTo:zilinec@email.cz

Prog-Soft s.r.o. Plzen
Informacni system pro vyrobce
a distributory napoju

Friday, April 9, 2004, 8:07:39 PM, bylo napsano:

LZ> On Behalf Of Dalibor
>> Ahoj,
>> potrebuji zjistit jednu vetu z kazde skupiny ze vsemi sloupci
>> s nejnovejsim casem pro dany datum
>>
>> Da se to nejak?

LZ> Ahoj.
LZ> Mozna ano.

LZ> Ludek












LZ> P.S. Pokud by se ti moje odpoved nezdala dostatecna tak je to proto, ze
LZ> odpovida Tvemu "zadani" 
LZ> Takze asi nam budes muset prozradit datovou strukturu a typ SQL serveru.
LZ> Jinak Ti nikdo nepomuze.




LZ> __________ Informace od NOD32 1.716 (20040413) __________

LZ> Tato zprava byla proverena antivirovym systemem NOD32.
LZ> http://www.nod32.cz



Odpovedá: Lstiburek Pavel

14. 6. 2004 11:51

Chtelo by to typ serveru a hrubou strukturu zucastnenych tabulek.

Pavel

> From: Lasevic, Martin [mailto:mlasevic@ratiopharm.cz]
> resim nasledujici SQL dotaz a zatim si s tim po nekolika
> dnech nevim rady (
> pritom nesmim pouzit ani view ani SP).
>
> Mame klienty, kteri jsou navstevovani nasimi obchodniky a na
> kazde schuzce
> se bavi o produktech ( nekdy stejnych, nekdy jinych).
>
> Mam za ukol vytvorit sql dotaz, ktery mi vyjede seznam
> klientu a posledni
> informaci o produktu, tzn. ze pokud se vyskytuje o produktu
> info vickrat,
> tak pouzit info z posledni navstevy.
>


Odpovedá: BS Info

14. 6. 2004 12:21

Zkuste select top with ties
btw: sp jsou v poslednim upg genup sputistelna, stejne tak i views.
Roman



----- Original Message -----
From: "Lasevic, Martin" <mlasevic@ratiopharm.cz>
To: <delphi-l@clexpert.cz>
Sent: Monday, June 14, 2004 11:34 AM
Subject: SQL dotaz


> Zdravim,
>
> resim nasledujici SQL dotaz a zatim si s tim po nekolika dnech nevim rady
(
> pritom nesmim pouzit ani view ani SP).
>
> Mame klienty, kteri jsou navstevovani nasimi obchodniky a na kazde schuzce
> se bavi o produktech ( nekdy stejnych, nekdy jinych).
>
> Mam za ukol vytvorit sql dotaz, ktery mi vyjede seznam klientu a posledni
> informaci o produktu, tzn. ze pokud se vyskytuje o produktu info vickrat,
> tak pouzit info z posledni navstevy.
>
> Napada vas, jak na to?
>
> Diky za pomoc
>
> Martin
>
> ======================================
> ing. Martin Lasevic
> Software Specialist
> Tel.: +420-2-51 02 11 30, +420-602-298 904
> Fax: +420-2-51 02 11 23
> mailto:mlasevic@ratiopharm.cz
>
>
>
>